package com.smartguard.service;

import java.util.ArrayList;
import java.util.List;

import com.smartguard.bean.Device;

public class DeviceService extends BaseService {
	/**
	 * 向数据库写入一个设备
	 * @param device
	 * @return
	 */
	public boolean insertDevice(Device device){
		if(device == null) return false;
		else return this.getBaseDAO().insert(device);
	}
	
	/**
	 * 从数据库中找找看有没有device这个设备
	 * @param device
	 * @return 找到则返回数据库中的设备，找不到则返回空
	 */
	public Device findOneDevice(Device device){
		if(device == null) return null;
		else return this.getBaseDAO().findOne(device);
	}
	
	/**
	 * 根据用户名查找用户的设备列表
	 * 钥匙端在前面
	 * 普通监控端在后面
	 * @param username
	 * @return 某个用户的设备列表，若该用户无设备则返回一个元素数为0的列表而不会返回null
	 */
	public List<Device> findDeviceByUsername(String username){
		ArrayList<Device> result = new ArrayList<Device>();
		if(username != null && !username.equals("")){
			Device ref = new Device();
			ref.setUsername(username);
			ref.setIsKey(true);
			result.addAll(this.getBaseDAO().find(ref, -1));
			ref.setIsKey(false);
			result.addAll(this.getBaseDAO().find(ref, -1));
		}
		return result;
	}
	
	/**
	 * 查找该设备所属的用户的设备列表
	 * @param deviceHash
	 * @return 无设备则返回一个元素数为0的列表而不会返回null
	 */
	public List<Device> findDeviceOfSameUser(String deviceHash){
		
		if(deviceHash == null || deviceHash.equals(""))	
			return new ArrayList<Device>();
		
		Device device = findDeviceByDeviceHash(deviceHash);
		String userName = device.getUsername();
		return findDeviceByUsername(userName);
		
	}
	
	/**
	 * 根据传入的设备哈希值作为线索，来更新设备信息
	 * @param deviceHash
	 * @param device
	 * @return
	 */
	public boolean updateDevice(String deviceHash, Device device){
		//根据设备哈希值创建一个索引对象
		Device ref = new Device();
		ref.setDeviceHash(deviceHash);
		
		return this.getBaseDAO().updateOne(ref, device);
	}
	
	/**
	 * 根据设备hash寻找设备，找不到返回空
	 * @param deviceHash
	 * @return
	 */
	public Device findDeviceByDeviceHash(String deviceHash){
		if(deviceHash == null || "".equals(deviceHash))
			return null;
		
		Device ref = new Device();
		ref.setDeviceHash(deviceHash);
		return this.getBaseDAO().findOne(ref);
	}
	
	/**
	 * @param username
	 * 根据username查找钥匙端
	 * @return
	 */
	public List<Device> findKeyDeviceByUsername(String username){
		if(username != null && !username.equals("")){
			Device ref = new Device();
			ref.setUsername(username);
			ref.setIsKey(true);
			return this.getBaseDAO().find(ref, -1);
		}
		return new ArrayList<Device>();
	}
	
	/**
	 * @param username
	 * 根据username查找监控端
	 * @return
	 */
	public List<Device> findOtherDeviceByUsername(String username){
		if(username != null && !username.equals("")){
			Device ref = new Device();
			ref.setUsername(username);
			ref.setIsKey(false);
			return this.getBaseDAO().find(ref, -1);
		}
		return new ArrayList<Device>();
	}
	
	public static void main(String[] args){
//		DeviceService d = new DeviceService();
//		Device ref = new Device();
//		ref.setDeviceHash("6eb09b80-8698-af32-fbc1-b3eb422bd504");
//		
//		Device device = d.findOneDevice(ref);
//		//device.setEventArray(eventArray);
//		
//		DeviceEvent event = new DeviceEvent();
//		event.setDeviceHash("6eb09b80-8698-af32-fbc1-b3eb422bd504");
//		event.setEventType(Const.EVENT_SENSOR);
//		event.setNextDeviceHash("8df999a9-ae3f-11b0-6fa4-220e21eff0b6");
//		event.setNextEventType(Const.EVENT_VIDEO);
//		
//		BasicDBList array = new BasicDBList();
//		array.add(JSON.toJSON(event));
//		device.setEventArray(array);
//		
//		System.out.println(d.updateDevice("6eb09b80-8698-af32-fbc1-b3eb422bd504", device));
		
		DeviceService d = new DeviceService();
//		Device ref = new Device();
//		ref.setUsername("yonghua");
//		d.getBaseDAO().delete(ref);
		List<Device> result = d.findDeviceByUsername("yonghua");
		for (Device device : result) {
			System.out.println(device.getDeviceHash());
		}
	}
}
